---
id: dbcontext-add
title: 9.5 新增操作
sidebar_label: 9.5 新增操作
---

`Furion` 框架提供非常多的语法糖进行数据库操作。

## 9.5.1 新增一条，无返回值

```cs
var user = new User { Name = "百小僧", Age = 27 };

// ==== 同步操作 ====

// 示例一
repository.Insert(user);

// 示例二
user.Insert();

// 示例三
repository.Entities.Add(user);

// 示例四
repository.ChangeEntityState(user, EntityState.Added);

// ==== 异步操作 ====

// 示例一
await repository.InsertAsync(user);

// 示例二
await user.InsertAsync();

// 示例三
await repository.Entities.AddAsync(user);

```

## 9.5.2 新增一条，返回最新数据

```cs
// ==== 同步操作 ====

// 示例一
var newEntity = repository.InsertNow(user);

// 示例三
var newEntity = user.InsertNow();

// ==== 异步操作 ====

// 示例二
var newEntity = await repository.InsertNowAsync(user); // 有三个重载

// 示例四
var newEntity = await user.InsertNowAsync();  // 有三个重载
```

## 9.5.3 新增多条（不立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.Insert(user, user2);

// 示例二
repository.Insert(new List<User> { user, user2 });

// 示例三
repository.Insert(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.InsertAsync(user, user2);

// 示例二
await repository.InsertAsync(new List<User> { user, user2 });

// 示例三
await repository.InsertAsync(new[] {user, user2 });
```

## 9.5.4 新增多条（立即提交）

```cs
// ==== 同步操作 ====

// 示例一
repository.InsertNow(user, user2);

// 示例二
repository.InsertNow(new List<User> { user, user2 });

// 示例三
repository.InsertNow(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.InsertNowAsync(user, user2);

// 示例二
await repository.InsertNowAsync(new List<User> { user, user2 });

// 示例三
await repository.InsertNowAsync(new[] {user, user2 });
```

:::tip 小知识

所有带 `Now` 结尾的表示立即提交到数据库，也就是立即调用 `SaveChanges` 或 `SaveChangesAsync`。

:::

## 9.5.5 忽略空值新增

默认情况下，`EFCore` 新增会插入全部列（除实体跟踪方式以外），有些时候我们希望 `Null` 值无需插入，这是我们只需要在更新时候配置 `ignoreNullValues` 参数即可，如：

```cs
repository.Add(entity, ignoreNullValues: true);
```

也可以全局配置，在 `AppDbContext` 的派生类的构造函数中启用即可：

```cs {11}
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
    [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
    public class DefaultDbContext : AppDbContext<DefaultDbContext>
    {
        public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
        {
            InsertOrUpdateIgnoreNullValues = true;
        }
    }
}
```

## 9.5.6 反馈与建议

:::note 与我们交流

给 Furion 提 [Issue](https://gitee.com/dotnetchina/Furion/issues/new?issue)。

:::
